package com.smart.community.work.dto;

import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;

import javax.validation.constraints.NotNull;
import javax.validation.constraints.NotBlank;
import java.time.LocalDate;
import java.time.LocalTime;

/**
 * 考勤记录DTO
 * 
 * 严格按照《Java后端SpringBoot代码开发规范.md》DTO规范实现：
 * - 功能单一原则：DTO类只用于数据传输，不包含业务逻辑
 * - 参数校验：使用JSR-303注解进行参数校验
 * - 字段命名：使用驼峰命名法，与前端保持一致
 * - 时间格式：使用@JsonFormat注解指定时间格式
 * - 完整注释：所有字段都有完整的JavaDoc注释
 * 
 * @author Wu.Liang
 * @since 2025-01-30
 * @version 1.0.0
 */
@Data
public class AttendanceDTO {

    /**
     * 用户ID
     */
    @NotNull(message = "用户ID不能为空")
    private Long userId;

    /**
     * 考勤日期
     */
    @NotNull(message = "考勤日期不能为空")
    @JsonFormat(pattern = "yyyy-MM-dd")
    private LocalDate attendanceDate;

    /**
     * 上班时间
     */
    @JsonFormat(pattern = "HH:mm:ss")
    private LocalTime clockInTime;

    /**
     * 下班时间
     */
    @JsonFormat(pattern = "HH:mm:ss")
    private LocalTime clockOutTime;

    /**
     * 考勤类型：clock_in-上班，clock_out-下班
     */
    @NotBlank(message = "考勤类型不能为空")
    private String type;

    /**
     * 状态：1-正常，2-迟到，3-早退，4-缺勤
     */
    private Integer status;

    /**
     * 打卡位置
     */
    private String location;

    /**
     * 备注
     */
    private String remark;
}
